怎么在Python中实现AES加密与解密

您所在的位置:网站首页 python aes加密模块 怎么在Python中实现AES加密与解密

怎么在Python中实现AES加密与解密

2023-08-04 05:14| 来源: 网络整理| 查看: 265

怎么在Python中实现AES加密与解密 发布时间:2021-06-02 17:25:54 来源:亿速云 阅读:188 作者:Leah 栏目:开发技术

怎么在Python中实现AES加密与解密?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB

 1.ECB模式(电子密码本模式:Electronic codebook)

ECB是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。

2.CBC模式(密码分组链接:Cipher-block chaining)

CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或。

3.CFB模式(密文反馈:Cipher feedback)

与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文(Stream Cipher)。

4.OFB模式(输出反馈:Output feedback)

OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。

从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现

python 在 Windows下使用AES时要安装的是pycryptodome 模块   pip install pycryptodome

python 在 Linux下使用AES时要安装的是pycrypto模块   pip install pycrypto

CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv

AES CBC 加密的python实现

from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex # 如果text不足16位的倍数就用空格补足为16位 def add_to_16(text):  if len(text.encode('utf-8')) % 16:   add = 16 - (len(text.encode('utf-8')) % 16)  else:   add = 0  text = text + ('\0' * add)  return text.encode('utf-8') # 加密函数 def encrypt(text):  key = '9999999999999999'.encode('utf-8')  mode = AES.MODE_CBC  iv = b'qqqqqqqqqqqqqqqq'  text = add_to_16(text)  cryptos = AES.new(key, mode, iv)  cipher_text = cryptos.encrypt(text)  # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串  return b2a_hex(cipher_text) # 解密后,去掉补足的空格用strip() 去掉 def decrypt(text):  key = '9999999999999999'.encode('utf-8')  iv = b'qqqqqqqqqqqqqqqq'  mode = AES.MODE_CBC  cryptos = AES.new(key, mode, iv)  plain_text = cryptos.decrypt(a2b_hex(text))  return bytes.decode(plain_text).rstrip('\0') if __name__ == '__main__':  e = encrypt("hello world") # 加密  d = decrypt(e) # 解密  print("加密:", e)  print("解密:", d)

AES ECB加密的python实现

""" ECB没有偏移量 """ from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex def add_to_16(text):  if len(text.encode('utf-8')) % 16:   add = 16 - (len(text.encode('utf-8')) % 16)  else:   add = 0  text = text + ('\0' * add)  return text.encode('utf-8') # 加密函数 def encrypt(text):  key = '9999999999999999'.encode('utf-8')  mode = AES.MODE_ECB  text = add_to_16(text)  cryptos = AES.new(key, mode)  cipher_text = cryptos.encrypt(text)  return b2a_hex(cipher_text) # 解密后,去掉补足的空格用strip() 去掉 def decrypt(text):  key = '9999999999999999'.encode('utf-8')  mode = AES.MODE_ECB  cryptor = AES.new(key, mode)  plain_text = cryptor.decrypt(a2b_hex(text))  return bytes.decode(plain_text).rstrip('\0') if __name__ == '__main__':  e = encrypt("hello world") # 加密  d = decrypt(e) # 解密  print("加密:", e)  print("解密:", d)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读: javascript与php使用aes进行加密/解密 Python如何实现aes加密解密

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python aes 上一篇新闻:怎么在Angular中实现svg和png图片下载 下一篇新闻:怎么在Python中使用OpenCV 调用摄像头并截图保存功能 猜你喜欢 便宜香港主机购买怎么选择北京建设网站要注意哪些事项云存储技术包括哪些内容云主机ssh直连怎么配置云服务器安装jdk的方法有哪些云虚拟主机控制面板怎么使用云主机技术有哪些mongodb取数据的方法有哪些域名服务器ip解析失败怎么解决个人租用境外服务器有哪些优势


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3